package com.wx.gof.principle.openandclose;

/**
 * @ClassName Application
 * @Author wx
 * @Description 应用程序-开闭原则（对内封闭、对外扩展）
 * @Date 2018-12-02-16:18
 */
public class Application {
    public static void main(String[] agrs) {
        /**
         * 这是设置学员信息并打印出来的操作
         */
        IStudentInfo studentInfo = new StudentInfo("WX", 18, "中国");
        System.out.println("姓名:" + studentInfo.getName() + "-年龄:" + studentInfo.getAge() + "-住址:" + studentInfo.getAddress());
        /**
         * 假设现在需要添加学员身高体重信息,如果你去修改学员信息接口，那么学员信息接口与学员信息实现类的代码要一起修改，打破了开闭原则
         * 此时我们只需要新增一个基于学员信息的扩展子类，学员信息接口与学员信息类不会有任何的代码变动
         */
        IStudentInfo studentInfoV2 = new StudentExtensionInfo("WX", 18, "中国", 185, 67);
        StudentExtensionInfo studentExtensionInfo = (StudentExtensionInfo) studentInfoV2;
        System.out.println("姓名:" + studentExtensionInfo.getName() + "-年龄:" + studentExtensionInfo.getAge() + "-住址:" + studentExtensionInfo.getAddress() + "-身高:" + studentExtensionInfo.getHeight() + "-体重" + studentExtensionInfo.getWeight());
    }
}
